package hibernate;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Carlos
 */
public class ClientesDAO {

    Session hSession = null;

    public ClientesDAO() {
        this.hSession = HibernateUtil.getSessionFactory().openSession();
    }

    public void create(Usuarios usuario, Sucursales sucursal, String nombre, String apellido_1, String apellido_2, String ident, String direccion, String localidad, String provincia, String cp, String telefono, String pais, String email, Integer cuenta) {
        //Clientes cliente = new Clientes(usuario, sucursal, nombre, apellido_1, apellido_2, ident, direccion, localidad, provincia, cp, telefono, pais, email);
        Clientes cliente = new Clientes(usuario, sucursal, nombre, apellido_1, apellido_2, ident, direccion, localidad, provincia, cp, telefono, pais, email, null);
        hSession.beginTransaction();
        hSession.save(cliente);
        hSession.getTransaction().commit();
    }

    public void create(Clientes cliente) {
        hSession.beginTransaction();
        hSession.save(cliente);
        hSession.getTransaction().commit();
    }

    public Clientes get(String dni) {
        hSession.clear();
        Query q = hSession.createQuery("from Clientes where ident='" + dni + "'");
        List<Clientes> lista = q.list();
        if (!lista.isEmpty()) {
            return lista.get(0);
        }
        return null;
    }

    public Clientes get(Integer pkCliente) {
        hSession.clear();
        Query q = hSession.createQuery("from Clientes where pkCliente='" + pkCliente + "'");
        List<Clientes> lista = q.list();
        if (!lista.isEmpty()) {
            return lista.get(0);
        }
        return null;
    }

    public List<Cuentas> getCuentasDelCliente(Clientes cliente) {
        CuentasHasClienteDAO DAOIntermedia = new CuentasHasClienteDAO();
        List<Cuentas> listCuentas = DAOIntermedia.getListCuentas(cliente);

        return listCuentas;
    }

    public void update(Clientes cliente) {
        hSession.beginTransaction();
        hSession.update(cliente);
        hSession.getTransaction().commit();
    }

    public void delete(Integer pkCliente) {
        Clientes cliente = this.get(pkCliente);
        hSession.beginTransaction();
        hSession.delete(cliente);
        hSession.getTransaction().commit();
    }
}